package com.arrayofsky.gateway.server;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpRequestDecoder;
import io.netty.handler.codec.http.HttpResponseEncoder;

/**
 * @Author: gaoyifeng
 * @Description: 会话管道初始化器
 * @Date Created in 2024-06-18-11:57
 * @Modified By:
 */
public class SessionChannelInitializer extends ChannelInitializer<SocketChannel> {

    /**
     * ChannelInitializer：
     * ChannelInitializer是Netty中用于初始化Channel的抽象类。
     * 它定义了一个initChannel方法，在该方法中可以添加自定义的处理器（ChannelHandler）到ChannelPipeline中。
     *
     * SocketChannel：
     * SocketChannel是Netty中表示TCP连接的抽象类。
     * 它扩展了Channel接口，并提供了与Socket相关的功能。
     *
     */
    @Override
    protected void initChannel(SocketChannel socketChannel) throws Exception {
        // ChannelPipeline：
        // ChannelPipeline是Netty中用于管理和执行ChannelHandler的容器。
        // 它负责处理和转发进入Channel的事件和数据。
        ChannelPipeline line = socketChannel.pipeline();
        line.addLast(new HttpRequestDecoder());
        line.addLast(new HttpResponseEncoder());
        // HttpObjectAggregator是Netty提供的一个处理器
        // 聚合HttpMessage和HttpContent
        // 将它们聚合成完整的HTTP请求或响应。
        line.addLast(new HttpObjectAggregator(1024 * 1024));
        line.addLast(new SessionServerHandler());
    }


}
